package com.webchat.pgc.repository.dao.sys;

import com.webchat.pgc.repository.entity.sys.SysDataDictionaryCategory;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;
import org.springframework.data.repository.query.Param;

/**
 * 数据字典分类DAO
 *
 * @author SongRenShuo
 * @date 2025/06/26
 */
@Repository
public interface ISysDataDictionaryCategoryDAO extends JpaRepository<SysDataDictionaryCategory, Long> {

    /**
     * 根据编码计数
     *
     * @param code 编码
     * @return long
     */
    long countDistinctByCode(String code);
    /**
     * 根据名称计数
     *
     * @param name 名称
     * @return long
     */
    long countDistinctByName(String name);
    /**
     * 根据编码计数
     *
     * @param code 编码
     * @param id ID
     * @return long
     */
    long countDistinctByCodeAndIdNot(String code, Long id);
    /**
     * 根据名称计数
     *
     * @param name 名称
     * @param id ID
     * @return long
     */
    long countDistinctByNameAndIdNot(String name, Long id);

    /**
     * 根据编码和名称模糊查询分页（支持 null 条件）
     *
     * @param code     编码
     * @param name     名称
     * @param pageable 分页参数
     * @return {@link Page }<{@link SysDataDictionaryCategory }>
     */
    @Query("SELECT c FROM SysDataDictionaryCategory c WHERE (:code IS NULL OR c.code = :code) AND (:name IS NULL OR c.name LIKE %:name%)")
    Page<SysDataDictionaryCategory> findByCodeAndNameLike(@Param("code") String code,
                                                          @Param("name") String name,
                                                          Pageable pageable);

}
